package upe.mestrado.operadores.mutacao;

import java.util.List;
import java.util.Random;

import upe.mestrado.base.Individuo;
import upe.mestrado.base.OperadorMutacao;
import upe.mestrado.base.Problema;

public class MutacaoAleatoria implements OperadorMutacao {

	@Override
	public int executar(List<Individuo> populacao, Problema problema) {
		Random random = new Random();
		
		int indiceSorteado = random.nextInt(populacao.size());
		Individuo individuo = populacao.get(indiceSorteado);
		
		int dimensaoSorteada = random.nextInt(individuo.getGene().length);
		
		double[] gene = individuo.getGene();
		
		double[] menorValor = problema.getValorMinimo();
		double[] maiorValor = problema.getValorMaximo();
		
		gene[dimensaoSorteada] = menorValor[dimensaoSorteada] + 
				((maiorValor[dimensaoSorteada]-menorValor[dimensaoSorteada]) * Math.random());

		individuo.setGene(gene);
		
		return indiceSorteado;
	}

}
